package cn.catsdad.base.repository.api;

import cn.catsdad.base.entity.BaseEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.repository.NoRepositoryBean;

import java.io.Serializable;
import java.util.Collection;

/**
 * @author xuyl
 * @version 1.0 2024/8/29
 */
@NoRepositoryBean
public interface IBaseRepository<T extends BaseEntity, ID extends Serializable> extends JpaRepository<T, ID> {

    /**
     * 批量保存，可根据实体状态自动判断update还是insert
     *
     * @param entities 保存的实体集合
     */
    void batchSave(Collection<T> entities);

    /**
     * 批量insert，只可以进行insert操作
     *
     * @param entities 实体集合
     */
    void batchInsert(Collection<T> entities);

    /**
     * 批量update，只可以进行update操作
     *
     * @param entities 实体集合
     */
    void batchUpdate(Collection<T> entities);

    /**
     * 获取实体类型
     *
     * @return 实体类型
     */
    Class<T> getEntityClass();

    String getQueryAlias();

    /**
     * 获取jpa实体信息封装对象
     *
     * @return 实体信息封装对象
     */
    JpaEntityInformation<T, ID> getEntityInfo();

}
